'use strict'

class content {

  constructor () {
    //param默认就是/:id，若要改变路由，则可以设置此属性，比如设置为/:name
    //this.param = '/:id'
  }

  __mid () {
    return [
      {
        name:'token-verify',
        path:['post','delete']//声明只对post和delete起作用
      }
      
    ]
  }

  //以下方法，若不需要，要去掉，避免无意义的路由。

  //获取资源具体内容
  //对应路由：content/:id
  async get (c) {
    let id = c.param.id

    let sqltext = 'SELECT id,detail,title,update_time '
    +'FROM content WHERE id=$1';

    let r = await c.service.psql.query(sqltext,[id])

    if(r.rowCount === 0) return c.status(404).send('not found');

    c.send(r.rows[0])

  }

  //创建资源
  //对应路由：POST /content
  async post (c) {
    try{
      //c.body是提交的请求体数据
      let data = JSON.parse(c.body)

      let sqltext = 'INSERT INTO content'
      +'(id,detail,title,add_time,update_time)'
      +' VALUES($1,$2,$3,$4,$5)'

      //随机数转成16进制字符串并去掉前两位，字符串作为ID
      let id = Math.random().toString(16).substring(2)//快捷 c.helper.makeId()
      let tm = Date.now()

      let r = await c.service.psql.query(sqltext,[
          id, data.detail, data.title, tm, tm
      ])

      if(r.rowCount === 0){
          return c.status(500).send('failed')
      }

      c.send(id)
    }catch(err){
        console.error(err)
        c.status(400).send('bad data')
    }
  }

  //更新资源
  //对应路由：PUT /contnet/:id
  async put (c) {

  }

  //获取列表
  //对应路由：GET /content
  async list (c) {
    let sqltext = 'SELECT id,title,update_time FROM content'
    let r = await c.service.psql.query(sqltext)
    c.send(r.rows)
  }

  //删除资源
  //对应路由：DELETE /content/:id
  async delete (c) {
    try{
        
      let id = c.param.id;console.log(id)
      let sqltext = 'DELETE FROM content WHERE id = $1'
      let r = await c.service.psql.query(sqltext,[id]) 

      if(r.rowCount === 0){
          return c.status(500).send('failed');
      }
      // c.send(id)
    }catch(err){
        console.log(err)
        c.status(400).send('bad data')
    }
  }
  

}

module.exports = content
